package innerclass;

/**
 * @author wly
 * @create 2022-12-07 11:10
 */
public class LocalInnerClass {
    public static void main(String[] args) {
        Outer01 outer01 = new Outer01();
        outer01.outer_02();
        System.out.println("outer01的hashcode = " + outer01);
    }
}

class Outer01{  //外部类
    private int n1 = 100;
    private void outer_f1(){
        System.out.println("外部类实例方法");
    }
    public void outer_02(){  //方法
        // 局部内部类是定义在外部类的局部位置上，通常在方法
        // 不能添加访问修饰符，但是可以使用final修饰
        // 作用域：仅仅在定义它的方法或代码块中
        class Inner01{  //局部内部类（本质仍然是一个类）
            private int n1 = 800;
            public void inner_f1(){
                // 局部内部类可以直接访问外部类的成员
                // 如果外部类和内部类的成员重名，默认遵循就近原则
                // 如果想访问外部类的成员 使用 外部类类名.this.成员 去访问
                // Outer01.this 本质就是外部类的对象
                System.out.println("n1 = " + n1);
                System.out.println("外部类的n1 = " + Outer01.this.n1);
                System.out.println("Outer01.this hashcode = " + Outer01.this);
            }
        }

        Inner01 inner01 = new Inner01();
        inner01.inner_f1();
    }
}
